package dp

func ClimbingStairsMinCost(n int, cost []int) int {
	if n <= 2 {
		return cost[n]
	}

	minFunc := func(a, b int) int {
		if a < b {
			return a
		}
		return b
	}
	cost1 := cost[1]
	cost2 := cost[2]
	var minCost int
	for i := 3; i <= n; i++ {
		minCost = minFunc(cost1, cost2) + cost[i]
		// 将cost2更新为minCost,因为minCost本身在累加，所以minCost不需要再次累加
		// 此处将cost2更新为minCost，可以按照之前求方案的爬楼梯来思考，假设是求方案数，则此时需要替换为新求得的所有方案数，再从所有方案数中找到最小的
		// 因此可以直接替换为最小的
		cost1 = cost2
		cost2 = minCost
	}
	return minCost
}
